package com.gitee.genshin.analyse.data.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.log.Log;
import com.gitee.genshin.analyse.data.GenshinDataService;
import com.gitee.genshin.analyse.data.GenshinDataType;
import com.gitee.genshin.analyse.data.GenshinRankType;

import java.util.List;

/**
 * @author hongda.li@dlmu.qq.com 2022/7/13 15:48
 */
public class SingleCountService extends GenshinDataService {
    @Override
    public void doService() {
        final Log log = Log.get();

        for (GenshinDataType genshinDataType : GenshinDataType.values()) {
            // 单个祈愿类型的抽卡总次数
            int totalOfDataType = queryGenshinDataTypeCount(genshinDataType);
            log.info("[{}]总次数[{}]", genshinDataType.getName(), totalOfDataType);
            write("[{}]总次数[{}]", genshinDataType.getName(), totalOfDataType);

            // 最近一次抽出五星、四星后，继续抽取的次数
            if (!GenshinDataType.TYPE1.equals(genshinDataType)) {
                int orderCount = queryGenshinDataTypeByOrderCount(genshinDataType, GenshinRankType.RANK5);
                log.info("[{}]已抽[{}]次且未出{}", genshinDataType.getName(), orderCount, GenshinRankType.RANK5.getName());
                write("[{}]已抽[{}]次且未出{}", genshinDataType.getName(), orderCount, GenshinRankType.RANK5.getName());
            }
            if (!GenshinDataType.TYPE1.equals(genshinDataType)) {
                int orderCount = queryGenshinDataTypeByOrderCount(genshinDataType, GenshinRankType.RANK4);
                log.info("[{}]已抽[{}]次且未出{}", genshinDataType.getName(), orderCount, GenshinRankType.RANK4.getName());
                write("[{}]已抽[{}]次且未出{}", genshinDataType.getName(), orderCount, GenshinRankType.RANK4.getName());
            }

            // 对不同级别的物品做分析
            for (GenshinRankType genshinRankType : GenshinRankType.values()) {
                // 单个祈愿类型的某级别次数
                int countOfRankType = queryGenshinDataTypeAndRankTypeCount(genshinDataType, genshinRankType);
                log.info("[{}][{}]总次数[{}]", genshinDataType.getName(), genshinRankType.getName(), countOfRankType);
                write("[{}][{}]总次数[{}]", genshinDataType.getName(), genshinRankType.getName(), countOfRankType);
                // 统计五星的名称
                if (GenshinRankType.RANK5.equals(genshinRankType)) {
                    List<String> names = queryData(genshinDataType);
                    if (CollUtil.isEmpty(names)) {
                        continue;
                    }
                    names.forEach(name -> {
                        log.info("[抽取结果]" + name);
                        write("[抽取结果]" + name);
                    });
                }
            }

            System.out.println();
            write("");
        }
    }
}
